package com.cy.java.basic;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


//这类在运行时会被读内存，除了此类之外还有哪些类不会读到内存，第一个读到内存的类是谁？
//通过配置JVM参数实现:-XX:TraceClassLoading
public class HelloWorld {
/*  请问main方法中的参数用途是什么？我们可以给它传值吗？ 假如是IDEA传值方式在哪实现？
接收业务中传递来的数据
程序在运行过程我想了解GC情况？有没有触发GC?假如触发了GC在哪些内存区域进行了回收？
JVM参数：
打印GC详细情况：-XX:+PrintGCdetails    */
    <font color="#0000FF">你好</font>

    public static void main(String[] args) {
        System.out.println(Arrays.toString(args));
        System.out.println("HelloWorld");
        /*  触发GC的手段，条件
        1）手动GC
        System.gc();
        2)自动GC  */
        List<byte[]> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            //list.add(new byte[1024*1024]);
            byte[] array = new byte[1024 * 1024];//对象创建越来越多的时候底层会启动GC
            //内存中的对象何时会被认为是垃圾对象？对象不可达（JVM访问不到）
        }
        /*  思考：系统在启动GC时要回收内容中的垃圾对象，此时可能会导致短时间的程序暂停？
         sping内置了一个可以管理bean对象的一个容器，为什么把对象交给spring管理呢？spring
        管理对象的优势呢？
        一、尽量减少GC。二、尽量减少内存空间的占用 三、降低代码的耦合。
        可以体会到使用框架的优势，现在抛出一些问题，一个方法写一千行，他用对象的时候不断的new
        ，new对象有风险么，你感觉你new一个对象写程序的时候没有问题，将来你的项目一旦并发
        访问的时候就会涉及到大量对象的创建，一但对象创建的多了这个对象没有被来得及回收，那么
        有可能会内存溢出，直接导致系统崩溃1分钟30分钟给企业带来很大的金钱上的损失，所以写程序的
        时候要注意细节细节细节。    */

    }
}
